package com.kotlin.flong.base

/*
 *高级函数
 */
fun main(args : Array<String>){

	var  a =10
	var  b =20
	var sum =0;
	var result =0;

	//方法一
	//sum 	= cal(a,b,::add) //第三个参数应该是函数的引用::add
	//result 	= cal(a,b,::sub) //第三个参数应该是函数的引用::sub

	//方法二
	//匿名函数lambda表达式
	//sum 	 = cal(a,b,{ m,n -> m +n})   //m和n会自动推断出类型因为cal函数定义了类型
	//result = cal(a,b,{ m,n -> m -n})

	//方法三
	//调用的时候是最后一个参数传递的是匿名函数lambda表达式，如果最后一个参数是lambda表达式时,可以把()前移

	sum = cal(a,b){m ,n -> m +n}
	result = cal(a,b){m ,n -> m -n}


	println(sum)
	println(result)
}

/*
 * 高级函数，函数里面能传函数称为高级函数
 *a 表示传递的第一个数据
 *b 表示传递的第二个数据
 *block 表示传递的工具要么是add,sub
 *返回值：使用工具求出的值
 */
fun cal(a :Int,b :Int ,block:(Int,Int)->Int):Int{

	//val result = block(a,b) //方法一
	val result = block.invoke(a,b) //方法二
	return result;
}

//函数不能穿函数表示普通函数
fun add(a :Int,b :Int): Int = a+b;

fun sub(a :Int,b :Int): Int = a-b;





